#include "messages.h"
#include <QtGui>
#include <QXmlStreamReader>
#include <QProgressDialog>
   #include <QMessageBox>
messages::messages()
{
    //m_path=QCoreApplication::applicationDirPath ();
    m_pathUser=QDir::homePath()+"/.kirtasse";
   // m_pathCostum=QDir::homePath()+"/.kirtasse/books";



    recentLoad();

}
messages::~messages()
{

}
//*********************chargement*******************************
void messages::treeChargeJozaa(QTreeWidget *view)
{
    QTreeWidgetItem *item=new QTreeWidgetItem(view) ;
    QTreeWidgetItem *osloItem=new QTreeWidgetItem(item) ;
    QTreeWidgetItem *osloItem2 ;

    QFile file(QCoreApplication::applicationDirPath() +"/data/ajzaa.xml");
    file.open(QIODevice::ReadOnly);
    view->clear();
    QXmlStreamReader xml;
    xml.setDevice(&file);
    while (!xml.atEnd()) {

        xml.readNext();
        if (xml.name() == "root"){
            QString idjoza= xml.attributes().value("id").toString();
            QString textjoza=xml.attributes().value("Name").toString();
            if(!textjoza.isNull()){
                item= new QTreeWidgetItem(view);
                item->setText(0,textjoza );
                item->setData(1,1,idjoza);
            }
        }else if (xml.name() == "Item"){
            QString idhizb= xml.attributes().value("id").toString();
            QString texthizb= xml.attributes().value("Name").toString();
            if(!texthizb.isNull()){
                osloItem= new QTreeWidgetItem(item);
                osloItem->setText(0,texthizb );
                osloItem->setData(1,1,idhizb);
            }
        }else if (xml.name() == "bk"){
            QString idhrobaa= xml.attributes().value("id").toString();
            QString textrobaa= xml.attributes().value("name").toString();
            if(!textrobaa.isNull()){
                osloItem2= new QTreeWidgetItem(osloItem);
                osloItem2->setText(0,textrobaa );
                osloItem2->setData(1,1,idhrobaa);
            }
        }

    }
   xml.clear();
    file.close();
}
void messages::treeChargeSoura(QTreeWidget *view)
{

     QTreeWidgetItem *itemsora=new QTreeWidgetItem(view);
        QTreeWidgetItem *itemaya ;
        QFile file(QCoreApplication::applicationDirPath() +"/data/curan.xml");
        file.open(QIODevice::ReadOnly);

        view->clear();
        QXmlStreamReader xml;
        xml.setDevice(&file);
        while (!xml.atEnd()) {
            xml.readNext();
            if (xml.name() == "Department"){
                QString idSora= xml.attributes().value("id").toString();
                QString textSora=xml.attributes().value("Name").toString();
                if(!textSora.isNull()){
                   itemsora= new QTreeWidgetItem(view);
                    itemsora->setText(0,textSora );
                    itemsora->setData(1,1,idSora);
                }
            }
            if (xml.name() == "Item"){
                QString idAya= xml.attributes().value("ID").toString();
                QString textAya=xml.readElementText();
                if(!textAya.isNull()){
                    itemaya= new QTreeWidgetItem(itemsora);
                    itemaya->setText(0,textAya );
                    itemaya->setData(1,1,idAya);
                }
            }
        }
        xml.clear();
        file.close();
}

void messages::treeChargeGroupe(QTreeWidget *view,int checked,bool asCombobox)
{

    QString path=QDir::homePath()+"/.kirtasse";

    QTreeWidgetItem *itemRoot= new QTreeWidgetItem(view);
    QTreeWidgetItem *itemGroup= new QTreeWidgetItem(itemRoot);
    QTreeWidgetItem *itemBook;
    QFile file(path+"/data/group.xml");
    file.open(QIODevice::ReadOnly);

    view->clear();
    if (asCombobox==false){comboGroup->clear(); }

    QIcon icon;
    icon.addPixmap(QPixmap(QString::fromUtf8(":/images/image/booki.png")), QIcon::Normal, QIcon::Off);
    QPixmap pixmap = icon.pixmap(QSize(22, 22),QIcon::Disabled,QIcon::Off);
    QIcon icon1;
    icon1.addPixmap(pixmap);
    QIcon icon2;
    icon2.addPixmap(QPixmap(QString::fromUtf8(":/images/image/groupb.png")), QIcon::Normal, QIcon::Off);
    QXmlStreamReader xml;
    xml.setDevice(&file);
    while (!xml.atEnd()) {
        xml.readNext();
        if (xml.name() == "root"){ //niveau 1
            QString textRoot=xml.attributes().value("Name").toString();
            if(!textRoot.isNull()){
                itemRoot= new QTreeWidgetItem(view);
                itemRoot->setText(0,textRoot );
                itemRoot->setIcon(0,icon2);

            }
        }else if (xml.name() == "Item"){ //niveau 2
            QString idGroup= xml.attributes().value("id").toString();
            QString textGroup= xml.attributes().value("Name").toString();
            if(!textGroup.isNull()){
                itemGroup= new QTreeWidgetItem( itemRoot);
                itemGroup->setText(0,textGroup );
                itemGroup->setIcon(0,icon2);
                itemGroup->setData(2,1,idGroup);
                if (checked==1){
                    itemGroup->setCheckState(0,Qt::Unchecked);
                }
            }

        }else if (xml.name() == "bk"){ //niveau 3

            QString idBook= xml.attributes().value("id").toString();
            QString textBook=xml.attributes().value("name").toString();
            QString AutBook= xml.attributes().value("aut").toString();
            QString BetakaBook= xml.attributes().value("betaka").toString();
            QString curanBook= xml.attributes().value("tfsr").toString();
            if(!textBook.isNull()){
                itemBook= new QTreeWidgetItem( itemGroup);
                itemBook->setText(0,textBook);
                itemBook->setText(1,AutBook);
                itemBook->setText(2,BetakaBook);
                itemBook->setData(1,1,idBook);
                itemBook->setIcon(0,icon);
              itemBook->setData(2,1,curanBook);
                if (checked==1){
                    itemBook->setCheckState(0,Qt::Unchecked);
                }
                if (asCombobox==false){

                    if (curanBook=="1")
                    {
                      // itemBook->setData(2,1,"1");
                        comboGroup->addItem(textBook,idBook+"/"+AutBook);
                    }
                }
            }
        }
    }


xml.clear();
    file.close();
}

bool messages::treeSaveGroupe(QTreeWidget *view)
{
    QString myxmlgroup="<?xml version='1.0' encoding='UTF-8'?>"
                       "<setting>"
                       "</setting>";
    m_doc.setContent(myxmlgroup);
    QTreeWidgetItem *item;
    QTreeWidgetItem *itemols;
    QTreeWidgetItem *itemols2;
    QString grouptext;
    QDomElement racine = m_doc.documentElement();
    for(int i=0;i<view->topLevelItemCount();++i)
    {
        item= view->topLevelItem(i);
        grouptext=item->text(0);
        QDomElement groupe=m_doc.createElement("root");     //انشاء عنصر جديد
        racine.appendChild(groupe);                    //اظافته في اخر القائمة
        groupe.setAttribute("Name",grouptext);      //اسم الكتاب
        groupe.setAttribute("id",i);
        for(int r=0;r<item->childCount();++r)
        {
            itemols=item->child(r);
            QString id= itemols->data(2,1).toString();
            QString title=itemols->text(0);
            QDomElement items=m_doc.createElement("Item");
            groupe.appendChild(items);
            items.setAttribute("id",id);
            items.setAttribute("Name",title);
            for(int r=0;r<itemols->childCount();++r)
            {
                itemols2=itemols->child(r);
                QString id= itemols2->data(1,1).toString();
                QString betaka=itemols2->text(2);
                QString aut  =itemols2->text(1);
                QString name =itemols2->text(0);
                QDomElement itemsbk=m_doc.createElement("bk");
                items.appendChild(itemsbk);
                itemsbk.setAttribute("id",id);
                itemsbk.setAttribute("betaka",betaka);
                itemsbk.setAttribute("aut",aut);
                itemsbk.setAttribute("name",name);
                if (itemols2->data(2,1)=="1")
                {
                    itemsbk.setAttribute("tfsr","1");
                }
            }
        }
    }
    QFile file(m_pathUser +"/data/group.xml");
    file.open(QIODevice::WriteOnly);              //فتح الملف للكتابة
    QTextStream out(&file);                       //الكتابة
    m_doc.save(out,1);                      //حفظ الملف
    file.close();
    m_doc.clear();
    return true;
}
void messages::treeChargeFahrass(QTreeWidget *view,QString Bname)
{

    QString titlepath= Bname +"/title.xml";
    QFile file(titlepath);
    file.open(QIODevice::ReadOnly);
//    if (organiz==true){
//       chargeList(Bname,count);
//    }
    view->clear();
    int d=0;
    QTreeWidgetItem *item[d];
    QString tit;
    QString id;
    QString lvl;

    item[1]= new QTreeWidgetItem(view);
    item[1]->setText(0,trUtf8("بسم الله الرحمن الرحيم") );
    item[1]->setData(1,1,1);
    QXmlStreamReader xml;
    xml.setDevice(&file);
    if (xml.readNextStartElement()) {
        if (xml.name() == "dataroot" ){
            Q_ASSERT(xml.isStartElement() && xml.name() == "dataroot");
            while (xml.readNextStartElement()) {
                if (xml.name() == "title"){

                 //   Q_ASSERT(xml.isStartElement() && xml.name() == "book");
                    while (xml.readNextStartElement()) {
                        if (xml.name() == "id"){
id=xml.readElementText();
//                            if (organiz==true){
//                                int dd=getPositionID(xml.readElementText()) ;
//                                QVariant ddv=dd;
//                                id= ddv.toString();
//                            }else{
//                                id=xml.readElementText();
//                            }

                        }else if (xml.name() == "tit"){

                            tit= xml.readElementText();
                        }else if (xml.name() == "lvl"){

                            lvl= xml.readElementText().trimmed();
                        }else{
                             xml.skipCurrentElement();
                        }


                    }
                    bool ok;
                    d=lvl.toInt(&ok,0);
                    if (ok==true){
                        if (d==1){
                            item[1]= new QTreeWidgetItem(view);
                            item[1]->setText(0,tit );
                            item[1]->setText(1,id );
                            item[1]->setData(1,1,id);
                        }else{
                            if (item[d-1]){
                                item[d]= new QTreeWidgetItem( item[d-1]);
                                item[d]->setText(0,tit );
                                item[d]->setText(1,id );
                                item[d]->setData(1,1,id);
                            }

                        }
                    }else{
                        item[1]= new QTreeWidgetItem(view);
                        item[1]->setText(0,tit );
                        item[1]->setText(1,id );
                        item[1]->setData(1,1,id);
                    }
                }
            }
        }


    }
    file.close();
    //listId.clear();
    xml.clear();
}
//حذف الكتاب المحدد
bool messages::treeMenuRemoveBook(QString BKname,bool removall)
{
    QFile file(m_pathUser +"/data/group.xml");
    file.open(QIODevice::ReadOnly);
    if (!m_doc.setContent(&file)){return false;}
    file.close();
    QDomElement racine = m_doc.documentElement(); //renvoie la balise racine
    QDomNode noeud = racine.firstChild();
    while(!noeud.isNull())
    {
        QDomNodeList tab;
        QDomNodeList tab2;
        QDomElement Root;
        Root=noeud.toElement();                   // تحديد اول عنصر من ابناء العنصر الاصلي
        if (Root.tagName()== "root")
        {
            tab = Root.childNodes();
            for (int i=0;i< (int)tab.length();++i)
            {
                QDomNode noeud2=tab.item(i);
                QDomElement Group=noeud2.toElement();
                tab2 = Group.childNodes();
                for(int r=0;r<(int)tab2.length();r++)
                {
                    QDomNode noeud3=tab2.item(r);
                    QDomElement Book=noeud3.toElement();
                    QString idBook =Book.attribute("id");
                    if (BKname==idBook){
                        Group.removeChild(Book);
                        file.open(QIODevice::WriteOnly);              //فتح الملف للكتابة عليها
                        QTextStream out(&file);                       //الكتابة
                        const int IndentSize = 1;
                        m_doc.save(out,IndentSize);                      //حفظ الملف
                        file.close();
                        m_doc.clear();                                   //مسح المحتويات من الذاكرة
                        if (removall==true){                     //الحذف من الجهاز
                            QString    pathbook=m_pathCostum;
                            QDir dir(m_pathCostum+"/" +BKname);
                            if (!dir.exists()){
                                return false;
                            }
                            dir.setFilter(QDir::Files | QDir::Hidden );
                            QFileInfoList list = dir.entryInfoList();
                            for (int i = 0; i < list.size(); ++i) {
                                QFileInfo fileInfo = list.at(i);
                                if(dir.remove(fileInfo.fileName())==false){
                                    return false;
                                }
                            }
                            QDir dirm(pathbook );
                            if(dirm.rmdir(BKname)==false){
                                 return false;
                            }
                        }
                        return true;
                    }
                }
            }
        }
        noeud = noeud.nextSibling();
    }
    m_doc.clear();
    file.close();
return true;
}
//***end chargement***
//****************************bigen recent****************************
void messages::recentLoad()
{
    QString myxmlgroup="<?xml version='1.0' encoding='UTF-8'?>"
                       "<setting>"
                       "</setting>";
    QFile file(m_pathUser +"/data/recent.xml");
    file.open(QIODevice::ReadOnly);
    if (!m_docR.setContent(&file))
    {
      m_docR.setContent(myxmlgroup);
    }
    file.close();
}
void messages::recentCharge()
{


    QDomElement racine = m_docR.documentElement(); //renvoie la balise racine
    QDomNode noeud = racine.lastChild();
    QDomElement Root;
   int i=0;
    while(!noeud.isNull())
    {
        i++;
        Root=noeud.toElement();
        QString texttitle=Root.attribute("title");
        QString textid=Root.attribute("id");
        QString textname=Root.attribute("name");
        QString textaut=Root.attribute("aut");
        QString isTefsir=Root.attribute("isTefsir");

        recentFileActs[i]->setText(texttitle);
        recentFileActs[i]->setData(textid + "/" + textname + "/" + textaut+"/" + isTefsir);
recentFileActs[i]->setVisible(true);

        noeud = noeud.previousSibling();


    }
}
void messages::recentChange(QString Bname,QString Btitle,QString Baut,QString Bid,int nbr,bool isTefsir)
{
    QDomElement racine = m_docR.documentElement(); //renvoie la balise racine
    QDomNodeList tab;
    QDomElement Root;
    QDomNode noeud = racine.firstChild();
    while(!noeud.isNull())
    {
        Root=noeud.toElement();
        QString textname=Root.attribute("name");
        if (textname==Bname){
            racine.removeChild(Root);
        }
        noeud = noeud.nextSibling();
    }
    tab=racine.childNodes();
    while ((int)tab.length()>=nbr)
    {
        QDomNode noeud_f = racine.firstChild();
        QDomElement Root_f;
        Root_f=noeud_f.toElement();
        racine.removeChild(Root_f);
    }
    QDomElement myel=m_docR.createElement("book");     //انشاء عنصر جديد
    racine.appendChild(myel);                    //اظافته في اخر القائمة
    myel.setAttribute("id",Bid);        //اسم مجلد الكتاب
    myel.setAttribute("name",Bname);      //اسم الكتاب
    myel.setAttribute("title",Btitle);      //اسم المؤلف
    myel.setAttribute("aut",Baut);

    myel.setAttribute("isTefsir",isTefsir);
}
void messages::recentSave()
{
    QFile file(m_pathUser +"/data/recent.xml");
    file.open(QIODevice::WriteOnly);              //فتح الملف للكتابة عليها
    QTextStream out(&file);                       //الكتابة
    const int IndentSize = 1;
    m_docR.save(out,IndentSize);                      //حفظ الملف
    file.close();
    m_docR.clear();
}
//***end recent***
 bool messages::fahrasSave(QTreeWidget *view,QString bkname)
 {
     QFile file;
     QString path;
     if(file.exists(m_pathCostum+"/" +bkname+"/title.xml")){
         path=m_pathCostum+"/" +bkname+"/title.xml";
     }else if (file.exists(QApplication::applicationDirPath()+"/books/" +bkname+"/title.xml")){
         path=QApplication::applicationDirPath()+"/books/" +bkname+"/title.xml";
     }else{
         return false;
     }
     file.setFileName(path);
     if(!file.open(QIODevice::WriteOnly) )  {            //فتح الملف للكتابة عليها
         return false;
     }
     QString myxmltitle="<?xml version='1.0' encoding='UTF-8'?>"
                        "<dataroot>"
                        "</dataroot>";
     m_doc.setContent(myxmltitle);
     QTreeWidgetItem *itemr;
     QTreeWidgetItem *item=new QTreeWidgetItem;
     QList<QTreeWidgetItem *> found =
             view->findItems(
                     "",Qt::MatchContains | Qt::MatchRecursive,0);//تنشاء قائمة بكل العناصر
     if (found.count()>0) {
         int lvl=1;
         foreach (item, found){
             itemr= item;
             if (!item->parent()){//اذا كان العنصر جذرا
                 writeInDoc(item->text(0),item->data(1,1).toString(),"1");
                 lvl=1;
             }else{//اذا كان له اباء
                 while(itemr->parent()){//معرفة عدد الاباء
                     itemr=itemr->parent();
                     lvl=lvl+1;
                 }
                 QVariant lvlstr=lvl;
                 writeInDoc(item->text(0),item->data(1,1).toString(),lvlstr.toString());
                 lvl=1;
             }

         }
     }


     QTextStream out(&file);                       //الكتابة
     const int IndentSize = 1;
     m_doc.save(out,IndentSize);                      //حفظ الملف
     file.close();
     m_doc.clear();

     return true;
 }


bool messages::writeInDoc(QString tit,QString data,QString lvl)
{
    QDomElement racine = m_doc.documentElement(); //renvoie la balise racine
    QDomNode noeud = racine.firstChild();
    QDomElement myel=m_doc.createElement("title");     //انشاء عنصر جديد
    racine.appendChild(myel);
    QDomElement myid=m_doc.createElement("id");     //انشاء عنصر جديد
    myel.appendChild(myid);
    QDomText t1 = m_doc.createTextNode(data);
    myid.appendChild(t1);
    QDomElement mynass=m_doc.createElement("tit");     //انشاء عنصر جديد
    myel.appendChild(mynass);
    QDomText t2 = m_doc.createTextNode(tit);
    mynass.appendChild(t2);
    QDomElement mylvl=m_doc.createElement("lvl");     //انشاء عنصر جديد
    myel.appendChild(mylvl);
    QDomText t3 = m_doc.createTextNode(lvl);
    mylvl.appendChild(t3);
    return true;
}
//******************bigen find *************************************************




//***end find***************************************************
 void messages::comboCharge(QComboBox *combo)
 {
     QDomDocument docCombo;
     QFile file(m_pathUser +"/data/group.xml");

     file.open(QIODevice::ReadOnly);
     if (!docCombo.setContent(&file)){return;}
     QDomElement racine = docCombo.documentElement(); //renvoie la balise racine
     QDomNode noeud = racine.firstChild();
     while(!noeud.isNull())
     {
         QDomNodeList tab;
         QDomNodeList tab2;
         QDomElement groupPer;
         groupPer=noeud.toElement();
         if (groupPer.tagName()== "root")
         {
             tab = groupPer.childNodes();
             for(int i=0;i<(int)tab.length();++i)
             {
                 QDomNode noeud2=tab.item(i);
                 QDomElement mygroup=noeud2.toElement();
                 QString mygroupname= mygroup.attribute("Name");
                 QString mygroupid= mygroup.attribute("id");
                 combo->addItem(mygroupname,mygroupid);
             }
         }
         noeud = noeud.nextSibling();
     }
     docCombo.clear();
     file.close();
 }
 bool messages::addNewBook(QString bkpath,QString bktitle,QString bkauth,QString bkbetaka,QString groupid ,bool cheked)
 {
   // QFile filepath(m_pathCostum+"/" +bkpath);
     QFile file(m_pathUser +"/data/group.xml");
     if (bkpath.isEmpty()){return false;}
   //  if (!filepath.exists()){return false;}
     if (bktitle.isEmpty()){bktitle=trUtf8("بدون اسم");}
     if (bkauth.isEmpty()){ bkauth=trUtf8("غير معروف");}
     file.open(QIODevice::ReadOnly);
     if (!m_doc.setContent(&file)){return false;}
     file.close();
     QDomElement racine = m_doc.documentElement();                  //عنصر الشجرة الاصلي
     QDomNode noeud = racine.firstChild();                       // تحديد اول عنصر من ابناء العنصر الاصلي
     while(!noeud.isNull())                                       //كلما كان العنصر غير فارغا
     {
         QDomNodeList tab;
         QDomNodeList tab2;
         QDomElement groupPer;
         groupPer=noeud.toElement();
         if (groupPer.tagName()== "root")                         //اذا كان اسم العنصر "root"
         {
             tab = groupPer.childNodes();                          //قائمة الابناء
             for(int i=0;i<(int)tab.length();++i)                        //عدد الابناء
             {
                 QDomNode noeud2=tab.item(i);
                 QDomElement mygroup=noeud2.toElement();
                 if  (mygroup.attribute("id")==groupid)     //التوقف عند العنصر الذي اخترناه من المجموعة مثلا "التفاسير
                 {
                     QDomElement myel=m_doc.createElement("bk");     //انشاء عنصر جديد
                     mygroup.appendChild(myel);                    //اظافته في اخر القائمة
                     myel.setAttribute("id",bkpath);        //اسم مجلد الكتاب
                     myel.setAttribute("name",bktitle);      //اسم الكتاب
                     myel.setAttribute("aut",bkauth);      //اسم المؤلف
                     myel.setAttribute("betaka", bkbetaka);      //بطاقة عن الكتاب
                     if (cheked==true) {
                         myel.setAttribute("tfsr", "1");
                     }
                     file.open(QIODevice::WriteOnly);              //فتح الملف للكتابة عليها
                     QTextStream out(&file);                       //الكتابة
                     const int IndentSize = 1;
                     m_doc.save(out,IndentSize);                      //حفظ الملف
                     file.close();
                     m_doc.clear();                                   //مسح المحتويات من الذاكرة
                     return true;                                         //انهاء العملية
                 }
             }
         }
         noeud = noeud.nextSibling();
     }
     m_doc.clear();
     file.close();
     return true;
 }

   //***********************favorite***********************************************
   void messages::favorite_charge(QTreeWidget *view,QIcon icong,QIcon iconf)
   {
   //    QString path=QCoreApplication::applicationDirPath ();
        QString path=QDir::homePath()+"/.kirtasse";

    QDomDocument doc;
       QString myxmlfavorite="<?xml version='1.0' encoding='UTF-8'?>"
                             "<dataroot>"
                             " <groupe name='عام' />"
                             "</dataroot>";
       QFile file(path +"/data/favorite.xml");
       file.open(QIODevice::ReadOnly);
       if (file.exists() ){
           if (!doc.setContent(&file))
               doc.setContent(myxmlfavorite);
       }
       file.close();
       QTreeWidgetItem *item;
       QTreeWidgetItem *osloItem ;
       view->clear();
       QDomElement racine = doc.documentElement(); //
       QDomNode noeud = racine.firstChild();
       while(!noeud.isNull())
       {
           QDomNodeList tab;
           QDomElement mesures;
           mesures=noeud.toElement();
           QString text1=mesures.attribute("Department");
           // QMessageBox::information(this, "conection", id1 + text1);
           item= new QTreeWidgetItem(view);
           item->setText(0,text1 );
           item->setIcon(0,icong);
           tab = mesures.childNodes();
           for(int i=0;i<(int)tab.length();i++)
           {
               QDomNode noeud2=tab.item(i);
               QDomElement mesures2=noeud2.toElement();
               QString id= mesures2.attribute("id");
               QString title= mesures2.attribute("title");
               QString bkname= mesures2.attribute("bkname");
               QString bktitle= mesures2.attribute("bktitle");
               QString autname= mesures2.attribute("autname");
               osloItem= new QTreeWidgetItem(item);
               osloItem->setText(0,title );
               osloItem->setData(2,1,id);
               osloItem->setText(1,bktitle );
               osloItem->setData(1,1,bkname);
               osloItem->setText(2,autname );
               osloItem->setIcon(0,iconf);
           }
           noeud = noeud.nextSibling();
       }
       doc.clear();
   }

void messages::favorite_save(QTreeWidget *view)
{
    QString myxmlfavorite="<?xml version='1.0' encoding='UTF-8'?>"
                          "<dataroot>"
                          "</dataroot>";
    m_doc.setContent(myxmlfavorite);
    QTreeWidgetItem *item;
    QTreeWidgetItem *itemols;
    QString grouptext;
    QDomElement racine = m_doc.documentElement();
    for(int i=0;i<view->topLevelItemCount();++i)
    {
        item= view->topLevelItem(i);
        grouptext=item->text(0);
        QDomElement groupe=m_doc.createElement("groupe");     //انشاء عنصر جديد
        racine.appendChild(groupe);                    //اظافته في اخر القائمة
        groupe.setAttribute("Department",grouptext);      //اسم الكتاب
        for(int r=0;r<item->childCount();++r)
        {
            itemols=item->child(r);
            QString id= itemols->data(2,1).toString();
            QString title=itemols->text(0);
            QString bkname=  itemols->data(1,1).toString();
            QString bktitle =itemols->text(1);
            QString autname=itemols->text(2);
            QDomElement items=m_doc.createElement("item");
            groupe.appendChild(items);
            items.setAttribute("id",id);
            items.setAttribute("title",title);
            items.setAttribute("bkname",bkname);
            items.setAttribute("bktitle",bktitle);
            items.setAttribute("autname",autname);
        }
    }
    QFile file(m_pathUser +"/data/favorite.xml");
    file.open(QIODevice::WriteOnly);              //فتح الملف للكتابة
    QTextStream out(&file);                       //الكتابة
    m_doc.save(out,1);                      //حفظ الملف
    file.close();
    m_doc.clear();
}
 //************************************
bool messages::treeviewItemRemove(QTreeWidget *view)
{
    QTreeWidgetItem *item= view->currentItem();
    if (!item){
        return false;
    }
    int t;
    if (item->parent()){
        t= item->parent()->indexOfChild(item);
        item->parent()->takeChild(t);
    } else{
        t=view->indexOfTopLevelItem(item);
        view->takeTopLevelItem(t);
    }
    return true;
}
bool messages::treeviewItemUp(QTreeWidget *view)
{
    int t;
    QTreeWidgetItem *new_item;           //العنصر الجديد
    QTreeWidgetItem *curent_item=view->currentItem();      //العنصر المحدد
    QTreeWidgetItem *old_item = view->itemAbove(curent_item);   //العنصر السابق
    if (!curent_item || !old_item){ //اذا لم يوجد عنصرا محددا او السابق موجودا يخرج
        return false;;
    }
    new_item=curent_item->clone(); //نسخ العنصر المحدد مع ابنائه ان كان يحمل ابناء
    if (!curent_item->parent()){  //اذا كان في قمة الشجرة اي ليس له ابناء
        t=view->indexOfTopLevelItem(curent_item);//معرفة ترقيم العنصر
        view->takeTopLevelItem(t);//حذف العنصر المحدد
        view->insertTopLevelItem(t-1,new_item); //اظافة العنصر المنسوخ في الذاكرة بعد العنصر التالي
    }    else{     //اذا كان العنصر ابنا
        QTreeWidgetItem *parent=curent_item->parent();
        t= parent->indexOfChild(curent_item);
        if(t==0){    //اذا كان العنصر اول عنصر ابن
            return false;;
        }
        parent->takeChild(t);
        parent->insertChild(t-1,new_item);
    }
    view->setCurrentItem(new_item); //
    return true;
}
bool messages::treeviewItemDown(QTreeWidget *view)
{
    int t;
    int r;
    QTreeWidgetItem *new_item;
    QTreeWidgetItem *curent_item=view->currentItem();//العنصر المحدد
    QTreeWidgetItem *old_item =view->itemBelow(curent_item);//العنصر التالي
    if (!curent_item || !old_item){  return false; } //اذا لم يوجد عنصرا محددا او التالي يخرج
    new_item=curent_item->clone(); //نسخ العنصر المحدد مع ابنائه ان كان يحمل ابناء
    if (!curent_item->parent()){  //اذا كان في قمة الشجرة اي ليس له ابناء
        t=view->indexOfTopLevelItem(curent_item);//معرفة ترقيم العنصر
        r=view->topLevelItemCount()-1;
        if(t==r){ return false; }
        view->takeTopLevelItem(t);//حذف العنصر المحدد
        view->insertTopLevelItem(t+1,new_item); //اظافة العنصر المنسوخ في الذاكرة بعد العنصر التالي
    } else{//اذا كان العنصر ابنا
        QTreeWidgetItem *parent=curent_item->parent();
        t= parent->indexOfChild(curent_item);
        r=parent->childCount()-1;
        if(t==r){return false;  }//اذا كان العنصر اخر عنصر ابن
        parent->takeChild(t);
        parent->insertChild(t+1,new_item);
    }
    view->setCurrentItem(new_item); //تحديد العنصر الجديد
    return true;
}
//**************************************************************************


 int messages::genirateId(QTreeWidget *view)
 {
     int newid=0;
     QList<QString> list;
     QTreeWidgetItem *itemtop;
     QTreeWidgetItem *itemgroup;
     for(int i=0;i<view->topLevelItemCount();++i){
         itemtop=view->topLevelItem(i);
         for(int r=0;r<itemtop->childCount();++r)
         {
             itemgroup=itemtop->child(r);
             QVariant data=itemgroup->data(2,1);
             list.append(data.toString());
         }
     }
     bool exist=false;

     while(exist==false)
     {
         newid=newid+1;
         QVariant dd=newid;
         if  ( !list.contains(dd.toString())){
             exist=true;
         }
     }
     list.clear();
     return newid;
 }
  QString messages::geniratNewBookName(QString groupParent)
  {

      QList<QString> list;
      QFile file(m_pathUser +"/data/group.xml");
      file.open(QIODevice::ReadOnly);
      if (!m_doc.setContent(&file)){return "bk"+groupParent;}
      file.close();
      QDomElement racine = m_doc.documentElement(); //renvoie la balise racine
      QDomNode noeud = racine.firstChild();
      while(!noeud.isNull())
      {
          QDomNodeList tab;
          QDomNodeList tab2;
          QDomElement Root;
          Root=noeud.toElement();                   // تحديد اول عنصر من ابناء العنصر الاصلي
          if (Root.tagName()== "root")
          {
              tab = Root.childNodes();
              for(int i=0;i<(int)tab.length();++i)
              {
                  QDomNode noeud2=tab.item(i);
                  QDomElement Group=noeud2.toElement();
                  tab2 = Group.childNodes();
                  for(int r=0;r<(int)tab2.length();r++)
                  {
                      QDomNode noeud3=tab2.item(r);
                      QDomElement Book=noeud3.toElement();
                      QString idBook =Book.attribute("id");
                      list.append(idBook);
                  }
              }
          }
          noeud = noeud.nextSibling();
      }
      m_doc.clear();
      file.close();
      int newid=0;
      bool exist=false;
      QString newBookName;
      while(exist==false)
      {
          newid=newid+1;

          QVariant dd=newid;
          newBookName="bk"+groupParent+"_"+dd.toString();
          if  ( !list.contains(newBookName)){
              exist=true;
          }
      }
      list.clear();
      return newBookName;
  }
  bool messages::saveBookInfo(QString bookname,QString title,QString author,QString betaka)
  {
      QFile file;
      QString path;
      if(file.exists(m_pathCostum+"/" +bookname+"/bookinfo.info")){
          path=m_pathCostum+"/" +bookname+"/bookinfo.info";
      }else if (file.exists(QApplication::applicationDirPath()+"/books/" +bookname+"/bookinfo.info")){
          path=QApplication::applicationDirPath()+"/books/" +bookname+"/bookinfo.info";
      }else{
         path=m_pathCostum+"/" +bookname+"/bookinfo.info";
      }
      file.setFileName(path);

      if(! file.open(QIODevice::WriteOnly)) {
          return false;
      }
          //فتح الملف للكتابة

      QString myxmltitle="<?xml version='1.0' encoding='UTF-8'?>"
                         "<dataroot>"
                         "</dataroot>";
      m_doc.setContent(myxmltitle);
     // QString grouptext;
      QDomElement racine = m_doc.documentElement();
      QDomElement groupe=m_doc.createElement("groupe");     //انشاء عنصر جديد
      racine.appendChild(groupe);                       //الكتابة
                    //اظافته في اخر القائمة
      groupe.setAttribute("title",title);
      groupe.setAttribute("author",author);
      groupe.setAttribute("betaka",betaka);

      QTextStream out(&file);                  //حفظ الملف
       m_doc.save(out,1);
      file.close();
      m_doc.clear();
      return true;
  }
 bool messages::loadBookInfo(QString bookname)
 {

     QFile file(bookname+"/bookinfo.info");
     if (!file.open(QIODevice::ReadOnly)){
         return false;
     }
     if (!m_doc.setContent(&file)){
         return false;
     }
     file.close();
     QDomElement racine = m_doc.documentElement(); //
     QDomNode noeud = racine.firstChild();
      QDomElement myper=noeud.toElement();

      //   mesures=noeud.toElement();
         infoBookTitle= myper.attribute("title");
         infoBookAutor= myper.attribute("author");
         infoBookBetaka= myper.attribute("betaka");

     m_doc.clear();
     return true;
     
 }

//**********************


